Resilience4j হল একটি লাইটওয়েট ফ্রেমওয়ার্ক যা স্প্রিং বুট অ্যাপ্লিকেশনে ফল্ট টলারেন্স (fault tolerance) যোগ করার জন্য ব্যবহার করা হয়। এটি মাইক্রোসার্ভিস বা ক্লায়েন্ট-সার্ভার অ্যাপ্লিকেশনে সার্ভিস ব্যর্থতা থেকে রক্ষা করার জন্য কার্যকর। Resilience4j প্রধানত Circuit Breaker, Retry, Rate Limiter, Bulkhead, এবং Time Limiter সমর্থন করে।
নিচে Spring Boot-এ Resilience4j ইন্টিগ্রেশনের একটি উদাহরণ দেখানো হলো:
Spring Initializr
ব্যবহার করে একটি নতুন স্প্রিং বুট প্রজেক্ট তৈরি করুন। নিচের ডিপেনডেন্সি যুক্ত করুন:
<dependencies>
<dependency>
<groupId>io.github.resilience4j</groupId>
<artifactId>resilience4j-spring-boot2</artifactId>
<version>1.7.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
# Circuit Breaker কনফিগারেশন
resilience4j.circuitbreaker.instances.myService.failure-rate-threshold=50
resilience4j.circuitbreaker.instances.myService.slow-call-rate-threshold=50
resilience4j.circuitbreaker.instances.myService.slow-call-duration-threshold=2s
resilience4j.circuitbreaker.instances.myService.minimum-number-of-calls=5
resilience4j.circuitbreaker.instances.myService.sliding-window-size=10
resilience4j.circuitbreaker.instances.myService.sliding-window-type=COUNT_BASED
resilience4j.circuitbreaker.instances.myService.wait-duration-in-open-state=10s
# Retry কনফিগারেশন
resilience4j.retry.instances.myService.max-attempts=3
resilience4j.retry.instances.myService.wait-duration=2s
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
@Service
public class ApiClient {
private final RestTemplate restTemplate;
public ApiClient(RestTemplate restTemplate) {
this.restTemplate = restTemplate;
}
public String fetchData(String url) {
return restTemplate.getForObject(url, String.class);
}
}
import io.github.resilience4j.circuitbreaker.annotation.CircuitBreaker;
import io.github.resilience4j.retry.annotation.Retry;
import org.springframework.stereotype.Service;
@Service
public class ResilientApiClient {
private final ApiClient apiClient;
public ResilientApiClient(ApiClient apiClient) {
this.apiClient = apiClient;
}
@CircuitBreaker(name = "myService", fallbackMethod = "fallbackFetchData")
@Retry(name = "myService")
public String fetchDataWithResilience(String url) {
return apiClient.fetchData(url);
}
// ফallback method
public String fallbackFetchData(String url, Throwable throwable) {
return "Fallback response due to: " + throwable.getMessage();
}
}
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ApiController {
private final ResilientApiClient resilientApiClient;
public ApiController(ResilientApiClient resilientApiClient) {
this.resilientApiClient = resilientApiClient;
}
@GetMapping("/fetch-data")
public String fetchData() {
String url = "https://jsonplaceholder.typicode.com/posts/1"; // উদাহরণ URL
return resilientApiClient.fetchDataWithResilience(url);
}
}
@CircuitBreaker
ব্যবহার করে নির্ধারণ করা হয়।@Retry
ব্যবহার করা হয়।fallbackMethod
প্যারামিটার ব্যবহার করা হয়।INFO - CircuitBreaker 'myService' in CLOSED state.
INFO - API Response: {userId: 1, id: 1, title: "...", body: "..."}
INFO - CircuitBreaker 'myService' in OPEN state.
INFO - Fallback response due to: I/O error on GET request
Resilience4j Actuator ব্যবহার করলে Circuit Breaker এর মেট্রিক্স দেখতে পারবেন। pom.xml
-এ নিচের ডিপেনডেন্সি যোগ করুন:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
এবং application.properties
ফাইলে Actuator সক্রিয় করুন:
management.endpoints.web.exposure.include=*
Endpoint:http://localhost:8080/actuator/circuitbreakers
Resilience4j হল Spring Boot অ্যাপ্লিকেশনে উচ্চমানের রেজিলিয়েন্স ফ্রেমওয়ার্ক। এটি
Hystrix
এর বিকল্প এবং বর্তমান সময়ে ব্যবহারযোগ্য একটি উন্নত টুল।
Read more